package com.fernandocejas.frodo.internal.observable; import com.fernandocejas.frodo.core.strings.Strings; import com.fernandocejas.frodo.internal.MessageManager; import com.fernandocejas.frodo.joinpoint.FrodoProceedingJoinPoint; import com.fernandocejas.frodo.joinpoint.TestJoinPoint; import com.fernandocejas.frodo.joinpoint.TestProceedingJoinPoint; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import rx.Observable; class ObservableRule implements TestRule { static final String OBSERVABLE_STREAM_VALUE = "fernando"; private final Class declaringType; private FrodoProceedingJoinPoint frodoProceedingJoinPoint; private ObservableInfo observableInfo; @Mock private MessageManager messageManager; ObservableRule(Class declaringType) { MockitoAnnotations.initMocks(this); this.declaringType = declaringType; } @Override public Statement apply(Statement statement, Description description) { final TestJoinPoint testJoinPoint = new TestJoinPoint.Builder(declaringType) .withReturnType(Observable.class) .withReturnValue(OBSERVABLE_STREAM_VALUE) .build(); final TestProceedingJoinPoint testProceedingJoinPoint = new TestProceedingJoinPoint(testJoinPoint); frodoProceedingJoinPoint = new FrodoProceedingJoinPoint(testProceedingJoinPoint); observableInfo = new ObservableInfo(frodoProceedingJoinPoint); return statement; } FrodoProceedingJoinPoint joinPoint() { return frodoProceedingJoinPoint; } MessageManager messageManager() { return messageManager; } ObservableInfo info() { return observableInfo; } String stringType() { return Strings.EMPTY; } }